package xyz.huanggy.minio.upload.service;

import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import xyz.huanggy.minio.upload.model.dto.TaskInfoDTO;
import xyz.huanggy.minio.upload.model.entity.SysFileInfo;
import xyz.huanggy.minio.upload.model.param.InitTaskParam;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * 分片上传-分片任务记录(SysUploadTask)表服务接口
 *
 * @since 2022-08-22 17:47:30
 */
public interface SysFileInfoService  {


    /**
     * 初始化一个任务
     */
    TaskInfoDTO initTask (InitTaskParam param);

    /**
     * 获取文件地址
     */
    String getPath (String bucket, String objectKey);

    /**
     * 获取上传进度
     */
    TaskInfoDTO queryProgress(String md5);

    /**
     * 生成预签名上传url
     * @param bucket 桶名
     * @param objectKey 对象的key
     * @param params 额外的参数
     */
    String genPreSignUploadUrl (String bucket, String objectKey, Map<String, String> params);

    /**
     * 合并分片
     */
    void merge (String md5);

    String genPreSignUploadUrl(String identifier, Integer partNumber);

    List<SysFileInfo> sysFileList();

    ResponseEntity<InputStreamResource> downloadFile(Long uploadId);
}
